'use strict';

const tokenList = 'loginUserList:';

/**
 * 挂在 扩展方法到 app对象上
 */
module.exports = {
  // jwt 获取token信息
  async getToken(userInfo) {
    // token bean
    const tokenBean = {
      id: userInfo.id,
      realName: userInfo.realName,
      branchCode: userInfo.branchCode,
      timeStamp: Date.now(),
    };
    // 秘钥
    const secret = this.config.myJwt.secret;
    // 可选参数
    const options = {
      expiresIn: this.config.myJwt.expiresIn
    };
    // 进行签名，获得token
    const token = this.jwt.sign(tokenBean, secret, options);
    // 将此对象存入redis中
    userInfo.token = token;
    // 将token存入 redis 服务器。  
    await this.redis.set(tokenList + userInfo.id, JSON.stringify(userInfo));
    // this.logger.debug('生成token：', token);
    return token;
  },
  // 校验token信息
  async checkToken(token) {

    // this.logger.debug('token信息；', token);
    // 校验token是否正确
    const tokenInfo = this.jwt.verify(token, this.config.myJwt.secret);

    this.logger.debug('是否开启单点登陆:', this.config.isSingleLoagin);

    let redisToken = await this.redis.get(tokenList + tokenInfo.id);

    redisToken = JSON.parse(redisToken);

    // this.logger.debug('redisToken:', redisToken);

    // 是否启动单点登陆
    if (this.config.isSingleLoagin) {
      if (redisToken && redisToken.token == token) {
        return redisToken;
      }
      return null;
    }
    return redisToken;
  },
};